/*
* Copyright (c) 2025 Shenzhen Kaihong Digital Industry Development Co., Ltd.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

#include "interfaces/c++/Node.h"
#include "interfaces/c++/MWServer.h"
#include "std_msgs/String.h"
#include <cstdint>
#include <iostream>
#include <string>
#include <thread>

int main() {
    if (!OHOS::OHMW::MWServer::IsRunning(OHOS::OHMW::MWServer::Type::DORA)) {
        std::cout << "MWServer is not running" << std::endl;
        return -1;
    }

    OHOS::OHMW::Node node("talker", OHOS::OHMW::Node::Type::DORA);
    while (true) {
        std::string data = "This is a plain text message";
        int32_t ret = node.Send("data", reinterpret_cast<const uint8_t*>(data.c_str()), data.size());
        if (ret != 0) {
            std::cout << "Failed to send data" << std::endl;
            return -1;
        }

        OHOS::OHMW::std_msgs::String msg;
        msg.data = "This is a std_msgs::String message";
        ret = node.SendMsg("msg", msg);
        if (ret != 0) {
            std::cout << "Failed to send message" << std::endl;
            return -1;
        }

        std::this_thread::sleep_for(std::chrono::seconds(1));
    }

    return 0;
}
